package fr.p10.miage.l3c.properties;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

/**
 * Cette classe démontre l'utilisation de properties dans Java
 * de 2 façons : 
 * - définies par l'utilisateur
 * - propriétés standard du système
 * @author lom
 *
 */
public class UtiliserProperties {
	/**
	 * Pour référencer le store des properties en mémoire.
	 */
	private static Properties myProperties;
	/**
	 * Pour formater les date au format FR.
	 */
	private static final DateFormat DF = new SimpleDateFormat("dd/MM/yyyy");


	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// Récupérer le chemin vers le répertoire courant de travail (ici, le projet eclipse).
		// Toutes les propriétés Système sont listées à cette adresse:
		// http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html
		String workingDir = System.getProperty("user.dir");
		
		// Construire le chemin vers le fichier de propriétés.
		String filePath = workingDir + System.getProperty("file.separator") + "config.properties";
		System.out.println(filePath);
		
		// Charger le fichier des proprietes utilisateur avec le chemin specifie
		loadMyProperties(filePath);
		
		// Maintenant, lire et afficher une propriété
		System.out.println(myProperties.get("serverurl"));
		
		// Créer une propriété
		// System.currentTimeMillis() récupère le temps en nbr de millisec depuis
		// le 1er janvier 1970 (Epoch)
		myProperties.put("derniereconnexion", DF.format(new Date(System.currentTimeMillis())));
		
		myProperties.put("toto", "toto");
		
		System.out.println(myProperties.get("user"));
		
		// Sauvegarder les propriétés dans le fichier
		storeMyProperties(filePath);
	}

	
	private static void loadMyProperties(String path){
		FileInputStream fis;
		try {
			myProperties = new Properties();
			fis = new FileInputStream(new File(path));
			myProperties.load(fis);
			fis.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void storeMyProperties(String path) {
		FileOutputStream fos;
		try {
			fos = new FileOutputStream(new File(path));
			myProperties.store(
					fos,
					"Modification de EDT properties a la date "
							+ DF.format(new Date(System.currentTimeMillis())));
			fos.flush();
			fos.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	
}
